package chjob

import (
	"fmt"
	"math/rand"
)

/*
以下这些题目都应该采用函数封装
1、有4个数字1、2、3、4，能组成多少个不重复的3位数，请打印出来。要求这个3位数不同位不能使用
相同数字，例如112、212就不可以。
2、使用英文小写字母随机生成一个大于3个字符的字符串并打印，请再把这个字符串逆序打印出来
3、合并字符串
给出2个英文小写字符串，依次字符交叉合并成新字符串，多出的部分追加在新字符串末尾。
例如：
abc、xyz => axbycz
ab、xyz => axbyz
abcd、xy => axbycd
*/

// 1、有4个数字1、2、3、4，能组成多少个不重复的3位数，请打印出来。要求这个3位数不同位不能使用相同数字，例如112、212就不可以。
func PrintNumber01() {
	for i := 1; i <= 4; i++ {
		for j := 1; j <= 4; j++ {
			if i == j {
				continue
			}
			for k := 1; k <= 4; k++ {
				if i == j || i == k || j == k {
					continue
				}
				// fmt.Printf("%v%v%v\t", i, j, k)
			}
		}
	}
}

// 2、使用英文小写字母随机生成一个大于3`个字符的字符串并打印，请再把这个字符串逆序打印出来
func PrintLetter() {
	// 随机生成大于3的数，[]
	n := rand.Intn(10) + 4
	s := ""
	for i := 0; i < n; i++ {
		// 小写字母  97-122
		str_num := rand.Intn(26) + 97
		s1 := fmt.Sprintf("%c", str_num)
		s += s1
	}
	fmt.Printf("%s\n", s)
	// 逆序打印
	f := make([]rune, len(s))
	for i, v := range s {
		f[len(s)-1-i] = v
	}
	for _, v := range f {
		fmt.Printf("%c", v)
	}
	fmt.Println()
}

// 3、合并字符串
// 给出2个英文小写字符串，依次字符交叉合并成新字符串，多出的部分追加在新字符串末尾。
// 例如：
// abc、xyz => axbycz
// ab、xyz => axbyz
// abcd、xy => axbycd

func MergeString() {
	a_string := "abcd"
	b_string := "xy"
	n := 0
	end_str := ""
	merge_string := ""

	if len(a_string) < len(b_string) {
		n = len(a_string)
		end_str = b_string[n:]
	} else {
		n = len(b_string)
		end_str = a_string[n:]
	}

	for i := 0; i < n; i++ {
		merge_string += a_string[i : i+1]
		merge_string += b_string[i : i+1]
	}
	fmt.Println(merge_string + end_str)
}
